signature PROPERTY_LIST =
sig
  type t
  
  val equals : t * t -> bool
  val new : unit -> t
  val newProperty : unit -> {peek : t -> 'a option,
                             add : t * 'a -> unit,
                             remove : t -> unit}
  val newPropertyPrint : ('a -> unit) -> {peek : t -> 'a option,
                                          add : t * 'a -> unit,
                                          remove : t -> unit,
                                          pp : t -> unit}
end